1463D - Pairs - CodeForces Solution


binary search constructive algorithms greedy two pointers *1900

Please click on ads to support us..

C++ Code:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define en '\n'
#define vec vector
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define pb push_back
#define eb emplace_back
#define pii pair<int,int>
#define pll pair<ll,ll>
#define in(x,y) (y).find((x))!=(y).end()
#define nin(x,y) (y).find((x))==(y).end()

#ifdef DEBUG
#include "template/debug.h"
#else
#define debug(x...)
#endif 

void solve() {
	int n; cin>>n;
	vec<int> black(2*n+1);
	map<int, int> mp;
	int bd1=0;
	for(int i=1; i<=n; ++i){
		int x; cin>>x;
		mp[i]=x;
		black[x]=1;
		if(x==i){
			++bd1;
		}
	}
	debug(n, black);
	int a=0, b=0;
	for(int i=2*n; i>=1; --i){
		if(!black[i]){
			++b;
			if (a>0){
				--b;
				--a;
			}
		} else {
			++a;
		}
	}
	int bd2=mp[b];
	int lb=max(bd1, bd2);
	int l=lb, r=2*n;
	//debug(l, r);
	while(l<r){
		int m=l+(r-l+1)/2;
		debug(m);
		bool ok=true;
		deque<int> ninb;
		for(int i=1; i<=2*n; ++i){
			if(!black[i]){
				ninb.pb(i);
			}
		}
		debug(ninb);
		for(int i=2*n; i>=1; --i){
			if(black[i]){
				if(i<=m){
					int x=ninb.back();
					ninb.pop_back();
					if(x<i){
						ok=false; break;
					}
				} else {
					int x=ninb.front();
					ninb.pop_front();
					if(x>i){
						ok=false; break;
					}
				}
			}
		}
		if(ok) l=m;
		else r=m-1;
	}
	debug(lb, l);
	int res=0;
	for(int i=lb; i<=l; ++i){
		if(black[i]){
			++res;
		}
	}
	if(lb==0)++res;
	cout<<res<<en;
}

int32_t main() {
	ios_base::sync_with_stdio(0); cin.tie(0);
	int t=1;
	cin>>t;
	while(t--) solve();
}


Comments

Submit
0 Comments
More Questions

320A - Magic Numbers
1658A - Marin and Photoshoot
514A - Chewbaсca and Number
382A - Ksenia and Pan Scales
734B - Anton and Digits
1080A - Petya and Origami
1642D - Repetitions Decoding
1440A - Buy the String
1658F - Juju and Binary String
478A - Initial Bet
981A - Antipalindrome
365A - Good Number
1204B - Mislove Has Lost an Array
1409D - Decrease the Sum of Digits
1476E - Pattern Matching
1107A - Digits Sequence Dividing
1348A - Phoenix and Balance
1343B - Balanced Array
1186A - Vus the Cossack and a Contest
1494A - ABC String
1606A - AB Balance
1658C - Shinju and the Lost Permutation
1547C - Pair Programming
550A - Two Substrings
797B - Odd sum
1093A - Dice Rolling
1360B - Honest Coach
1399C - Boats Competition
1609C - Complex Market Analysis
1657E - Star MST